package com.lix.controller.workflow.cmd;

import org.activiti.engine.impl.cmd.NeedsActiveTaskCmd;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntityManager;


/**
 * 自定义 command 模型实现删除任务数据
 * 原因：直接通过 taskSerivce.delete是无法直接删除的，不通过校验，会报错：流程正在运行中无法删除。
 * 因此要用我们自己写的逻辑调用删除方法。
 */

public class DeleteTaskCommand extends NeedsActiveTaskCmd<String>{

    private final String username;

    // 构造函数中添加一个新的参数 username
    public DeleteTaskCommand(String taskId, String username) {
        super(taskId);
        this.username = username;
    }

    @Override
    protected String execute(CommandContext commandContext, TaskEntity task) {
        TaskEntityManager taskEntityManager = commandContext.getTaskEntityManager();
        // 删除当前任务，不会把执行表中的 is_active_更新为0，会将任务数据更新到历史任务实例表中
        taskEntityManager.deleteTask(task,
                "【"+task.getName()+"】任务被" + username + "】驳回",
                false, false);
        return null;
    }
}
